#include <iostream>
#include <string>
using namespace std;

template<typename T>
class MyClass {
public:
    MyClass(const T& a)
        : _a(a)
    {}
    
private:

    template<typename U>
    friend void myFriendFunction(MyClass<U>& obj);

private:

    T _a;
};


template<typename U>
void myFriendFunction(MyClass<U>& obj) {
    cout << "I am friend, the a number is :" << obj._a << endl;
}



int main()
{
    MyClass<int> tmp(10);
    myFriendFunction(tmp);
    return 0;
}

//  "content": "\u8fdb\u7a0b\u4fe1\u53f7\u662f\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u5411\u53e6\u4e00\u4e2a\u8fdb\u7a0b\u6216\u8005\u64cd\u4f5c\u7cfb\u7edf\u53d1\u9001\u7684\u4e00\u79cd\u7279\u6b8a\u5f62\u5f0f\u7684\u5f02\u6b65\u6d88\u606f\u3002\u5b83\u53ef\u4ee5\u7528\u6765\u901a\u77e5\u76ee\u6807\u4e3b\u4f53\u53d1\u751f\u7684\u4e8b\u4ef6\uff0c\u5982\u53d1\u751f\u9519\u8bef\u6216\u5b8c\u6210\u7279\u5b9a\u64cd\u4f5c\u7b49\u3002 \u8fdb\u7a0b\u53ef\u4ee5\u901a\u8fc7\u5411\u76ee\u6807\u8fdb\u7a0b\u53d1\u9001\u7279\u5b9a\u7684\u4fe1\u53f7\u3001\u4e2d\u65ad\u6216\u63d0\u9192\u76ee\u6807\u8fdb\u7a0b\uff0c\u4ece\u800c\u5bf9\u8fdb\u7a0b\u8fdb\u884c\u64cd\u4f5c\u3002\u8fdb\u7a0b\u4fe1\u53f7\u901a\u5e38\u88ab\u7528\u6765\u7ba1\u7406\u8fdb\u7a0b\u4e4b\u95f4\u7684\u901a\u4fe1\u548c\u540c\u6b65\uff0c\u8ba9\u8fdb\u7a0b\u53ef\u4ee5\u66f4\u597d\u5730\u5171\u5b58\u5e76\u4e92\u76f8\u534f\u4f5c\u3002"

// int main()
// {
//     //string masage = "\u8fdb\u7a0b\u4fe1\u53f7\u662f\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u5411\u53e6\u4e00\u4e2a\u8fdb\u7a0b\u6216\u8005\u64cd\u4f5c\u7cfb\u7edf\u53d1\u9001\u7684\u4e00\u79cd\u7279\u6b8a\u5f62\u5f0f\u7684\u5f02\u6b65\u6d88\u606f\u3002\u5b83\u53ef\u4ee5\u7528\u6765\u901a\u77e5\u76ee\u6807\u4e3b\u4f53\u53d1\u751f\u7684\u4e8b\u4ef6\uff0c\u5982\u53d1\u751f\u9519\u8bef\u6216\u5b8c\u6210\u7279\u5b9a\u64cd\u4f5c\u7b49\u3002 \u8fdb\u7a0b\u53ef\u4ee5\u901a\u8fc7\u5411\u76ee\u6807\u8fdb\u7a0b\u53d1\u9001\u7279\u5b9a\u7684\u4fe1\u53f7\u3001\u4e2d\u65ad\u6216\u63d0\u9192\u76ee\u6807\u8fdb\u7a0b\uff0c\u4ece\u800c\u5bf9\u8fdb\u7a0b\u8fdb\u884c\u64cd\u4f5c\u3002\u8fdb\u7a0b\u4fe1\u53f7\u901a\u5e38\u88ab\u7528\u6765\u7ba1\u7406\u8fdb\u7a0b\u4e4b\u95f4\u7684\u901a\u4fe1\u548c\u540c\u6b65\uff0c\u8ba9\u8fdb\u7a0b\u53ef\u4ee5\u66f4\u597d\u5730\u5171\u5b58\u5e76\u4e92\u76f8\u534f\u4f5c\u3002";

//     string str = "\u8fdb\u7a0b\u4fe1\u53f7\u662f\u64cd\u4f5c\u7cfb\u7edf\u5728\u7279\u5b9a\u6761\u4ef6\u4e0b\u53d1\u9001\u7ed9\u8fdb\u7a0b\u7684\u4e00\u79cd\u5f02\u6b65\u901a\u4fe1\u65b9\u5f0f\u3002\u5f53\u8fdb\u7a0b\u53d7\u5230\u4fe1\u53f7\u65f6\uff0c\u53ef\u4ee5\u6839\u636e\u4fe1\u53f7\u7684\u4e0d\u540c\u7c7b\u578b\u505a\u51fa\u76f8\u5e94\u7684\u54cd\u5e94\uff0c\u5982\u4e2d\u65ad\u5f53\u524d\u64cd\u4f5c\u3001\u6539\u53d8\u8fdb\u7a0b\u884c\u4e3a\u7b49\u3002\u4fe1\u53f7\u7684\u53d1\u9001\u548c\u5904\u7406\u5b8c\u5168\u7531\u64cd\u4f5c\u7cfb\u7edf\u8d1f\u8d23\uff0c\u8fdb\u7a0b\u53ea\u80fd\u901a\u8fc7\u6ce8\u518c\u4fe1\u53f7\u5904\u7406\u51fd\u6570\u6216\u4fee\u6539\u4fe1\u53f7\u5904\u7406\u65b9\u5f0f\u6765\u8fdb\u884c\u54cd\u5e94\u3002\u5e38\u89c1\u7684\u4fe1\u53f7\u5305\u62ec\u7ec8\u6b62\u8fdb\u7a0b\u7684SIGKILL\u3001\u4e2d\u65ad\u8fdb\u7a0b\u7684SIGINT\u7b49\u3002";

    
//     cout << setlocale(LC_ALL, "\u8fdb\u7a0b\u4fe1\u53f7\u662f\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u5411\u53e6\u4e00\u4e2a\u8fdb\u7a0b\u6216\u8005\u64cd\u4f5c\u7cfb\u7edf\u53d1\u9001\u7684\u4e00\u79cd\u7279\u6b8a\u5f62\u5f0f\u7684\u5f02\u6b65\u6d88\u606f\u3002\u5b83\u53ef\u4ee5\u7528\u6765\u901a\u77e5\u76ee\u6807\u4e3b\u4f53\u53d1\u751f\u7684\u4e8b\u4ef6\uff0c\u5982\u53d1\u751f\u9519\u8bef\u6216\u5b8c\u6210\u7279\u5b9a\u64cd\u4f5c\u7b49\u3002 \u8fdb\u7a0b\u53ef\u4ee5\u901a\u8fc7\u5411\u76ee\u6807\u8fdb\u7a0b\u53d1\u9001\u7279\u5b9a\u7684\u4fe1\u53f7\u3001\u4e2d\u65ad\u6216\u63d0\u9192\u76ee\u6807\u8fdb\u7a0b\uff0c\u4ece\u800c\u5bf9\u8fdb\u7a0b\u8fdb\u884c\u64cd\u4f5c\u3002\u8fdb\u7a0b\u4fe1\u53f7\u901a\u5e38\u88ab\u7528\u6765\u7ba1\u7406\u8fdb\u7a0b\u4e4b\u95f4\u7684\u901a\u4fe1\u548c\u540c\u6b65\uff0c\u8ba9\u8fdb\u7a0b\u53ef\u4ee5\u66f4\u597d\u5730\u5171\u5b58\u5e76\u4e92\u76f8\u534f\u4f5c\u3002") << endl;

//     return 0;
// }